<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">

    </div>

    <script src="./js/react18.js"></script>
    <script src="./js/react-dom18.js"></script>
    <script src="./js/babel.min.js"></script>
    <script src="./js/prop-types.js"> </script>

    <script type="text/babel">

        // 创建一个根对象：
        let root = ReactDOM.createRoot(document.getElementById("box"));


        class MyPerson extends React.Component {

            constructor(props) {
                super();
                // this.count = 10;
                // 在类组件里，如果想定义响应式的数据:
                // 1)、必须把数据定义在state里
                // 2)、修改state里的数据，必须调用setState方法。
                this.state = {
                    count:5,
                    age:12,
                    goods:{
                        name:"华为p60",
                        price:10000
                    }
                }
            }

            changeCount() {
                // 1、setState：会把参数和原对象合并。
                this.setState({
                    count:this.state.count+1
                })
            }

            changePrice(){
                // 2、setState完成的是浅合并。
                this.setState({
                    goods:{
                        ...this.state.goods,
                        price:this.state.goods.price-500
                    }
                });
            }

            render() {
                console.log("render");
                return (
                    <div>
                        <h1>状态机</h1>
                        <p>count:{this.state.count}</p>
                        <input type="button" value="修改count" onClick={() => this.changeCount()} />
                        <hr/>
                        <p>age:{this.state.age}</p>
                        <hr/>
                        <p>商品名称：{this.state.goods.name}</p>
                        <p>商品价格：{this.state.goods.price}</p>
                        <input type="button" value="修改价格" onClick={()=>this.changePrice()} />

                    </div>
                )
            }

        }




        const jsx = (
            <div>
                <MyPerson />
            </div>)


        // 把jsx渲染到根对象对应的dom容器里
        root.render(jsx);


    </script>
</body>

</html>